home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 3100 / 3100.xpi / chrome / content / js / options.js < prev   
Text File  |  2010-01-23  |  17KB  |  547 lines

  1. // Click&Clean, MIT, <http://www.hotcleaner.com/>. Copyright Mixesoft(c)Project 2004-2010 <http://www.mixesoft.com/>
  2.  
  3.  
  4. addEventListener('load', function() {
  5.  
  6.   var bSave = true;
  7.   
  8.   // set window size
  9.   innerWidth = $('page').clientWidth;
  10.   innerHeight = $('page').clientHeight;
  11.   
  12.   localize();
  13.   
  14.   readPrefs(false);
  15.   
  16.   addEventListener('unload', function() {
  17.     if (bSave)
  18.       writePrefs();
  19.   }, false);
  20.  
  21.   // home
  22.   $('home').addEventListener('mouseover', function() {
  23.     this.style.backgroundImage = 'url(img/home_over.gif)';
  24.   }, 0);
  25.   
  26.   $('home').addEventListener('mouseout', function() {
  27.     this.style.backgroundImage = 'url(img/home_out.gif)';
  28.   }, 0);
  29.   
  30.   $('home').addEventListener('click', function() {
  31.     if (navigator.language == 'ru')
  32.       newTab('http://www.hotcleaner.com/ru_clickclean_firefox.html');
  33.     else
  34.       newTab('http://www.hotcleaner.com/clickclean_firefox.html');
  35.   }, 0);
  36.   
  37.   // forum
  38.   $('forum').addEventListener('mouseover', function() {
  39.     this.style.backgroundImage = 'url(img/forum_over.gif)';
  40.   }, 0);
  41.   
  42.   $('forum').addEventListener('mouseout', function() {
  43.     this.style.backgroundImage = 'url(img/forum_out.gif)';
  44.   }, 0);
  45.   
  46.   $('forum').addEventListener('click', function() {
  47.     newTab('http://www.hotcleaner.com/app/clickclean_forum.php?b=f&l='+navigator.language);
  48.   }, 0);
  49.   
  50.   // twitter  
  51.   $('twitter').addEventListener('mouseover', function() {
  52.     this.style.backgroundImage = 'url(img/twitter_over.gif)';
  53.   }, 0);
  54.   
  55.   $('twitter').addEventListener('mouseout', function() {
  56.     this.style.backgroundImage = 'url(img/twitter_out.gif)';
  57.   }, 0);
  58.   
  59.   $('twitter').addEventListener('click', function() {
  60.     newTab('http://twitter.com/clickclean');
  61.   }, 0);
  62.   
  63.   // contact  
  64.   $('contact').addEventListener('mouseover', function() {
  65.     this.style.backgroundImage = 'url(img/contact_over.gif)';
  66.   }, 0);
  67.   
  68.   $('contact').addEventListener('mouseout', function() {
  69.     this.style.backgroundImage = 'url(img/contact_out.gif)';
  70.   }, 0);
  71.   
  72.   $('contact').addEventListener('click', function() {
  73.     if (navigator.language == 'ru')
  74.       newTab('http://www.hotcleaner.com/ru_clickclean.html#contact');
  75.     else
  76.       newTab('http://www.hotcleaner.com/index.html#contact');
  77.   }, 0);
  78.   
  79.   // caption
  80.   $('san-cap').addEventListener('click', function() {
  81.     clearBrowsingData(8);
  82.   }, false);
  83.   
  84.   $('san-enabled').addEventListener('click', setSanStates, false);
  85.   
  86.   $('san-close').addEventListener('click', setSanStates, false);
  87.   
  88.   $('san-ask').addEventListener('click', function() {
  89.       $('san-time').disabled = !this.checked;
  90.   }, false);
  91.     
  92.   
  93.   // clear browsing data
  94.   $('san-clear').addEventListener('click', function() {
  95.     clearLSO();
  96.     clearUI(1);
  97.   }, false);
  98.   
  99.   $('ext-sanitize').addEventListener('click', setExtStates, false);
  100.   
  101.   $('ext-close').addEventListener('click', setExtStates, false);
  102.   
  103.   // browse
  104.   $('ext-browse').addEventListener('click', function() {
  105.     var path = openFileDlg();
  106.     if (path) {
  107.       $('ext-path').value = path;
  108.     }
  109.   }, false);
  110.   
  111.   // run external app.
  112.   $('ext-run').addEventListener('click', function() {
  113.     clearLSO();
  114.     clearUI(0);
  115.   }, false);
  116.   
  117.   // close all windows and tabs
  118.   $('adv-tabs').addEventListener('click', function() {
  119.     $('adv-tab').disabled = !this.checked;         
  120.   }, false);
  121.   
  122.   // reset
  123.   $('opt-def').addEventListener('click', function() {
  124.     readPrefs(true); // read default prefs.
  125.   }, 0);
  126.  
  127.   // ok
  128.   $('opt-ok').addEventListener('click', function() {
  129.     close();
  130.   }, 0);
  131.   
  132.   // cancel
  133.   $('opt-cancel').addEventListener('click', function() {
  134.     bSave = false;
  135.     close();
  136.   }, 0);
  137.   
  138.   
  139.   function setSanStates() {
  140.     if ($('san-enabled').checked || $('san-close').checked) {
  141.       $('san-ask').disabled = $('san-clear').disabled = false;
  142.       $('san-time').disabled = !$('san-ask').checked;
  143.     }
  144.     else {
  145.        $('san-time').disabled = $('san-ask').disabled = $('san-clear').disabled = true;
  146.     }
  147.   }
  148.   
  149.   function setExtStates() {
  150.     if ($('ext-sanitize').checked || $('ext-close').checked) {
  151.       $('ext-path').disabled = $('ext-browse').disabled  = $('ext-arg').disabled = $('ext-run').disabled = false;
  152.     }
  153.     else {
  154.        $('ext-path').disabled = $('ext-browse').disabled  = $('ext-arg').disabled =$('ext-run').disabled = true;
  155.     }
  156.   }
  157.   
  158.   function readPrefs(bDef) {
  159.     var prefs;
  160.     
  161.     if (bDef) {
  162.       prefs = Components.classes["@mozilla.org/preferences-service;1"]
  163.         .getService(Components.interfaces.nsIPrefService)
  164.         .getDefaultBranch("extensions.clickclean.");
  165.     } 
  166.     else {
  167.       prefs = Components.classes["@mozilla.org/preferences-service;1"]
  168.         .getService(Components.interfaces.nsIPrefService)
  169.         .getBranch("extensions.clickclean.");
  170.     }
  171.     
  172.     $('san-enabled').checked = prefs.getBoolPref('sanitize');
  173.     $('san-close').checked = prefs.getBoolPref('close'); 
  174.     $('san-ask').checked = prefs.getBoolPref('showPrompt');
  175.     $('san-time').selectedIndex = prefs.getIntPref('wait');
  176.     setSanStates(); 
  177.     
  178.     $('ext-sanitize').checked = prefs.getBoolPref('useExt');
  179.     $('ext-close').checked = prefs.getBoolPref('closeExt');  
  180.     var path = $('ext-path').value = prefs.getComplexValue("path", Components.interfaces.nsISupportsString).data;  
  181.     var arg = $('ext-arg').value = prefs.getComplexValue("arg", Components.interfaces.nsISupportsString).data;
  182.     setExtStates();
  183.     
  184.     $('adv-lso').checked = prefs.getBoolPref('lso');
  185.     $('adv-tabs').checked = prefs.getBoolPref('tabs');   
  186.     $('adv-tab').checked = prefs.getBoolPref('tab');
  187.     $('adv-tab').disabled = !$('adv-tabs').checked;
  188.     
  189.     // ccleaner or wsd
  190.     if (path.length < 1) {
  191.       if (navigator.platform == 'Win32') {
  192.         path = getInstallPath('CCleaner');
  193.         if (path) {
  194.           $('ext-path').value = path+'\\CCleaner.exe';
  195.           $('ext-arg').value = '/auto';  
  196.         }
  197.         else {
  198.           path = getInstallPath('Wise Disk Cleaner_is1');
  199.           if (path) {
  200.             $('ext-path').value = path+'WiseDiskCleaner.exe';
  201.             $('ext-arg').value = '-a -p';
  202.           }  
  203.         }
  204.       }
  205.     }
  206.           
  207.   }
  208.   
  209.   function writePrefs() {
  210.     if (bSave) {
  211.       var prefs = Components.classes["@mozilla.org/preferences-service;1"]
  212.         .getService(Components.interfaces.nsIPrefService)
  213.         .getBranch("extensions.clickclean.");
  214.         
  215.       prefs.setBoolPref('sanitize', $('san-enabled').checked);
  216.       prefs.setBoolPref('close', $('san-close').checked);
  217.       prefs.setBoolPref('showPrompt', $('san-ask').checked);
  218.       prefs.setIntPref('wait', $('san-time').selectedIndex );
  219.       
  220.       prefs.setBoolPref('useExt', $('ext-sanitize').checked);
  221.       prefs.setBoolPref('closeExt', $('ext-close').checked);
  222.       
  223.       var str = Components.classes["@mozilla.org/supports-string;1"]
  224.           .createInstance(Components.interfaces.nsISupportsString);
  225.       
  226.       str.data = $('ext-path').value;
  227.       prefs.setComplexValue("path", Components.interfaces.nsISupportsString, str);
  228.       str.data = $('ext-arg').value;
  229.       prefs.setComplexValue("arg", Components.interfaces.nsISupportsString, str);
  230.       
  231.       prefs.setBoolPref('lso', $('adv-lso').checked);
  232.       prefs.setBoolPref('tabs', $('adv-tabs').checked);
  233.       prefs.setBoolPref('tab', $('adv-tab').checked);
  234.     }
  235.   }
  236.   
  237.   function localize() {
  238.  
  239.     var s = $('bundle_clickclean');
  240.     if (s) {
  241.       document.title = s.getString('doctitle');
  242.       
  243.       // localize menu
  244.       $('home-text').textContent = s.getString('home-text');
  245.       $('forum-text').textContent = s.getString('forum-text');
  246.       $('twitter-text').textContent = s.getString('twitter-text');
  247.       $('contact-text').textContent = s.getString('contact-text');
  248.       
  249.       // localize private data box
  250.       $('san-cap').textContent = s.getString('san-cap');
  251.       $('san-enabled-desc').textContent = s.getString('san-enabled-desc');
  252.       $('san-close-desc').textContent = s.getString('san-close-desc');
  253.       $('san-ask-desc').textContent = s.getString('san-ask-desc');
  254.       $('san-time-desc').textContent = s.getString('san-time-desc');
  255.       $('san-time-inf').textContent = s.getString('san-time-inf');
  256.       $('san-clear').textContent = s.getString('san-clear');
  257.       
  258.       // localize ext. app. box
  259.       $('ext-cap').textContent = s.getString('ext-cap');
  260.       $('ext-sanitize-desc').textContent = s.getString('ext-sanitize-desc');
  261.       $('ext-close-desc').textContent = s.getString('ext-close-desc');
  262.       $('ext-path-desc').textContent = s.getString('ext-path-desc');
  263.       $('ext-arg-desc').textContent = s.getString('ext-arg-desc');
  264.       $('ext-run').textContent = s.getString('ext-run');
  265.       
  266.       // advanced box
  267.       $('adv-cap').textContent = s.getString('adv-cap');
  268.       $('adv-lso-desc').textContent = s.getString('adv-lso-desc');
  269.       $('adv-tabs-desc').textContent = s.getString('adv-tabs-desc');
  270.       $('adv-tab-desc').textContent = s.getString('adv-tab-desc');
  271.       
  272.       // localize btns.
  273.       $('opt-def').textContent = s.getString('opt-def');
  274.       $('opt-ok').textContent = s.getString('opt-ok');
  275.       $('opt-cancel').textContent = s.getString('opt-cancel');
  276.       
  277.       // localize tooltips
  278.       initTip($('home'), s.getString('home'), 0, 0, 280);
  279.       initTip($('forum'), s.getString('forum'), 0, 0, 150);
  280.       initTip($('twitter'), s.getString('twitter'), -140, 0, 150);
  281.       initTip($('contact'), s.getString('contact'), -90, 0, 100);
  282.       initTip($('ext-path'), s.getString('ext-path'), -110, 0, 160);
  283.       initTip($('ext-arg'), s.getString('ext-arg'),-110, 0, 140);
  284.       initTip($('opt-def'), s.getString('opt-def-title'), 0, -80, 160);
  285.     }
  286.   }
  287.  
  288.   function initTip(obj, strTip, iLeft, iTop, iWidth) {
  289.     var tid = 0;
  290.     var t = $('tip');
  291.     
  292.     obj.addEventListener('mousemove', function(e) {
  293.     
  294.       t.style.top = e.pageY+23+((iTop)? iTop:0)+'px';
  295.       t.style.left = e.pageX+((iLeft)? iLeft:0)+'px';
  296.       if (iWidth)
  297.         t.style.width = iWidth+'px';
  298.           
  299.       if (!tid) {
  300.         tid = window.setTimeout(function() {
  301.           t.textContent = strTip;
  302.           
  303.           t.style.display = 'block';
  304.           
  305.           window.clearTimeout(tid);
  306.           
  307.           tid = window.setTimeout(function() {
  308.             t.style.display = 'none';
  309.             window.clearTimeout(tid);
  310.           }, 2000);
  311.         }, 500);
  312.       }
  313.     }, true);
  314.     
  315.     obj.addEventListener('mouseout', function() {
  316.       window.clearTimeout(tid);
  317.       tid = 0;
  318.       var t = $('tip');
  319.       t.style.display = 'none';
  320.     }, true);
  321.     
  322.   }
  323.  
  324.  
  325.   function openFileDlg() {
  326.     
  327.     var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
  328.  
  329.     var props = Components.classes["@mozilla.org/file/directory_service;1"]
  330.       .getService(Components.interfaces.nsIProperties);
  331.        
  332.     var OS = Components.classes["@mozilla.org/xre/app-info;1"]
  333.       .getService(Components.interfaces.nsIXULRuntime).OS.toLowerCase();
  334.  
  335.     fp.init(window, 'Choose application' , 0);
  336.  
  337.     if (OS == 'linux') {
  338.         fp.displayDirectory = props.get("Desk", Components.interfaces.nsIFile);
  339.     }
  340.     else if (OS == 'darwin') {
  341.     }
  342.     else {
  343.       fp.appendFilter('Windows executable', '*.exe');
  344.       fp.appendFilter('Batch file', '*.bat');
  345.         fp.appendFilter('All', '*.*');
  346.         fp.displayDirectory = props.get("Desk", Components.interfaces.nsIFile);
  347.     }
  348.       
  349.     var rv = fp.show();
  350.     
  351.     if (rv == 0 || rv == 2)
  352.       return fp.file.path;
  353.   }
  354.  
  355.   function newTab(url)
  356.   {
  357.     try {
  358.       var b = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  359.           .getService(Components.interfaces.nsIWindowMediator)
  360.           .getMostRecentWindow("navigator:browser").gBrowser;
  361.               
  362.       b.selectedTab = b.addTab(url);
  363.     }
  364.     catch(e){}
  365.   }
  366.   
  367.   function clearBrowsingData(wait) {
  368.     
  369.     var wdlg = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
  370.       .getService(Components.interfaces.nsIWindowWatcher)
  371.       .openWindow(null, "chrome://browser/content/sanitize.xul", null, "chrome,centerscreen", null);
  372.         
  373.     wdlg.addEventListener('load', function() {
  374.       
  375.       var tid = 0;
  376.       
  377.       wdlg.addEventListener('unload', function(e) {
  378.         // case cancel
  379.         if (tid)
  380.           wdlg.clearTimeout(tid);
  381.       }, false)
  382.         
  383.       var dlg = wdlg.document.getElementsByTagName('prefwindow');
  384.             
  385.       dlg = dlg[0];
  386.         
  387.       if(wait > 7)
  388.         return;
  389.             
  390.       if (wait < 1) {
  391.         dlg.acceptDialog();
  392.         return;
  393.       }
  394.             
  395.       var btn = dlg.getButton('accept');
  396.       if (btn) {
  397.         var i = wait;
  398.         var label = btn.label;
  399.         
  400.         function setLabel() {
  401.           btn.label = label+' ('+i+')';
  402.           if (i < 1)
  403.             dlg.acceptDialog();
  404.           else {
  405.             --i;
  406.             tid = wdlg.setTimeout(setLabel, 1000);
  407.           }
  408.         }
  409.         
  410.         setLabel();
  411.       }
  412.           
  413.     }, false);
  414.       
  415.   } 
  416.   
  417.   function runExt(path, args) {
  418.       var file = Components.classes["@mozilla.org/file/local;1"]
  419.                   .createInstance(Components.interfaces.nsILocalFile);
  420.       var proc = Components.classes["@mozilla.org/process/util;1"]
  421.                   .createInstance(Components.interfaces.nsIProcess);
  422.       
  423.       file.initWithPath(path);
  424.       proc.init(file);
  425.       
  426.       proc.run(false, [args], 1);
  427.   }
  428.   
  429.   function clearLSO() {
  430.     
  431.     if (!$('adv-lso').checked)
  432.       return;
  433.     
  434.     var OS = Components.classes["@mozilla.org/xre/app-info;1"]
  435.       .getService(Components.interfaces.nsIXULRuntime).OS.toLowerCase();
  436.     
  437.     var props = Components.classes["@mozilla.org/file/directory_service;1"]
  438.       .getService(Components.interfaces.nsIProperties);
  439.     
  440.     var file = Components.classes["@mozilla.org/file/local;1"]
  441.             .createInstance(Components.interfaces.nsILocalFile);
  442.     
  443.     var dir, path;
  444.     
  445.     if (OS == 'linux') {
  446.           dir = props.get('Home', Components.interfaces.nsIFile);
  447.       path = dir.path + "/.macromedia/Flash_Player/#SharedObjects";
  448.           rem();
  449.       path = dir.path + "/.macromedia/Flash_Player/macromedia.com/support/flashplayer/sys"
  450.       rem();
  451.     } 
  452.    
  453.     else if (OS == 'darwin') {
  454.       dir = props.get('ULibDir', Components.interfaces.nsIFile);
  455.       path = dir.path + "/Preferences/Macromedia/Flash Player/#SharedObjects";
  456.       rem();
  457.       path = dir.path + "/Preferences/Macromedia/Flash Player/macromedia.com/support/flashplayer/sys"
  458.       rem();
  459.     } 
  460.    
  461.     else { // win
  462.       dir = props.get('AppData', Components.interfaces.nsIFile);
  463.       path = dir.path + '\\Macromedia\\Flash Player\\#SharedObjects';
  464.           rem();
  465.       path = dir.path + "\\Macromedia\\Flash Player\\macromedia.com\\support\\flashplayer\\sys"
  466.       rem();
  467.     }
  468.        
  469.       function rem() {
  470.       try {
  471.         file.initWithPath(path);
  472.         if (file.exists)
  473.           file.remove(true);
  474.       } catch (e){};
  475.     } 
  476.   }
  477.   
  478.   function clearUI(bSan) {
  479.     
  480.     if ($('adv-tabs').checked) {
  481.       var m = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  482.         .getService(Components.interfaces.nsIWindowMediator);
  483.       if (m) {
  484.         
  485.         var recent = m.getMostRecentWindow("navigator:browser");
  486.         
  487.         // enum and close all windows but keep selected
  488.         var e = m.getEnumerator('');
  489.         if (e) {
  490.           var w;
  491.           while(e.hasMoreElements()) {  
  492.             w = e.getNext();
  493.             // close tabs
  494.             if (w == recent) {
  495.               var b = w.gBrowser;
  496.               if (!$('adv-tab').checked)
  497.                 b.selectedTab = b.addTab('about:blank');
  498.         
  499.               b.removeAllTabsBut(b.selectedTab);   
  500.             }
  501.             else
  502.               w.close();
  503.           } 
  504.         }
  505.       }
  506.     }
  507.     
  508.     // run ext. or sanitize
  509.     if (bSan) {
  510.       if ($('san-ask').checked)
  511.         clearBrowsingData($('san-time').selectedIndex);
  512.       else
  513.         clearBrowsingData(0);
  514.     }
  515.     else 
  516.       runExt($('ext-path').value, $('ext-arg').value);
  517.   }
  518.   
  519.   function $(id) {
  520.     return document.getElementById(id);
  521.   }
  522.   
  523.   // win32 only
  524.   function getInstallPath(subkey) {
  525.       try {
  526.         var key = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey);
  527.         key.open(key.ROOT_KEY_LOCAL_MACHINE,
  528.              "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+subkey,
  529.              key.ACCESS_READ);
  530.       
  531.         var path = key.readStringValue("InstallLocation");
  532.         key.close();
  533.         return path;
  534.       }
  535.       catch(e) {
  536.         return 0;
  537.       }
  538.   }
  539.   
  540.   function LOG(text) {
  541.     Components.classes["@mozilla.org/consoleservice;1"]
  542.       .getService(Components.interfaces.nsIConsoleService)
  543.       .logStringMessage(text);
  544.   }
  545.  
  546. }, 0);
  547.